uCalc API Version: 5.7.0-preview.1 Released: 7/30/2026
Warning
uCalc API Preview Release Notice:This preview documentation describes the intended behavior of the API. It is not fully accurate or complete.The current preview build contains incomplete features, unoptimized performance, and is subject to breaking changes.Use of the preview version in your production code is not recommended.
Product:
Class:
Gets a special Rule object that acts as a template, defining the default properties for all new rules created in this Transformer.
The DefaultRuleSet property provides access to a special Rule object that is not used for matching text itself. Instead, it acts as a prototype or template for all new rules created within its parent Transformer. This is a powerful feature for establishing consistent behavior and reducing boilerplate code.
When you create a new rule using FromTo() or Pattern(), the new Rule object starts with a copy of all the property settings from DefaultRuleSet. You can then override these defaults on a per-rule basis.
csharp
// Set a default for all rules in this transformer
t.DefaultRuleSet.CaseSensitive = true;
// This rule will now be case-sensitive by default
var rule1 = t.FromTo("HELLO", "HI");
// You can still override it for a specific rule
var rule2 = t.FromTo("world", "there").SetCaseSensitive(false);
This is the ideal place to configure behavior that should apply to most or all rules in a transformer:
Most regular expression engines handle global settings with flags that apply to the entire regex object (e.g., RegexOptions.IgnoreCase in .NET, or the /i flag in Perl/JavaScript). This is often an all-or-nothing choice. If you need two patterns with different case sensitivity, you typically need to create two separate regex objects.
uCalc's model is more object-oriented and flexible. The DefaultRuleSet provides instance-level defaults for a specific Transformer object. This offers superior encapsulation, allowing you to have multiple Transformer instances with different default behaviors running concurrently. Furthermore, the ability to override these defaults on a per-rule basis provides a powerful, two-tiered configuration system that is not available with simple global regex flags.
ID: 142
using uCalcSoftware;
var uc = new uCalc();
var t = uc.NewTransformer();
var Text = "This is a test.";
var p = t.FromTo("This {words:3}", "[{words}]");
Console.WriteLine($"Input: {Text}");
Console.WriteLine($"Pattern: {p.Pattern}");
Console.WriteLine("");
Console.WriteLine("3 captured tokens are in brackets");
Console.WriteLine("");
Console.WriteLine($"WhitespaceSensitive = {t.DefaultRuleSet.WhitespaceSensitive}");
Console.WriteLine(t.Transform(Text));
Console.WriteLine("");
t.DefaultRuleSet.WhitespaceSensitive = true;
Console.WriteLine($"WhitespaceSensitive = {t.DefaultRuleSet.WhitespaceSensitive}");
Console.WriteLine(t.Transform(Text));
Input: This is a test.
Pattern: This {words:3}
3 captured tokens are in brackets
WhitespaceSensitive = False
[is a test].
WhitespaceSensitive = True
[ is ]a test. using uCalcSoftware; var uc = new uCalc(); var t = uc.NewTransformer(); var Text = "This is a test."; var p = t.FromTo("This {words:3}", "[{words}]"); Console.WriteLine($"Input: {Text}"); Console.WriteLine($"Pattern: {p.Pattern}"); Console.WriteLine(""); Console.WriteLine("3 captured tokens are in brackets"); Console.WriteLine(""); Console.WriteLine($"WhitespaceSensitive = {t.DefaultRuleSet.WhitespaceSensitive}"); Console.WriteLine(t.Transform(Text)); Console.WriteLine(""); t.DefaultRuleSet.WhitespaceSensitive = true; Console.WriteLine($"WhitespaceSensitive = {t.DefaultRuleSet.WhitespaceSensitive}"); Console.WriteLine(t.Transform(Text));
#include
#include "uCalc.h"
using namespace std;
using namespace uCalcSoftware;
#define tf(IsTrue) ((IsTrue) ? "True" : "False")
int main() {
uCalc uc;
auto t = uc.NewTransformer();
auto Text = "This is a test.";
auto p = t.FromTo("This {words:3}", "[{words}]");
cout << "Input: " << Text << endl;
cout << "Pattern: " << p.Pattern() << endl;
cout << "" << endl;
cout << "3 captured tokens are in brackets" << endl;
cout << "" << endl;
cout << "WhitespaceSensitive = " << tf(t.DefaultRuleSet().WhitespaceSensitive()) << endl;
cout << t.Transform(Text) << endl;
cout << "" << endl;
t.DefaultRuleSet().WhitespaceSensitive(true);
cout << "WhitespaceSensitive = " << tf(t.DefaultRuleSet().WhitespaceSensitive()) << endl;
cout << t.Transform(Text) << endl;
}
Input: This is a test.
Pattern: This {words:3}
3 captured tokens are in brackets
WhitespaceSensitive = False
[is a test].
WhitespaceSensitive = True
[ is ]a test. #include <iostream> #include "uCalc.h" using namespace std; using namespace uCalcSoftware; #define tf(IsTrue) ((IsTrue) ? "True" : "False") int main() { uCalc uc; auto t = uc.NewTransformer(); auto Text = "This is a test."; auto p = t.FromTo("This {words:3}", "[{words}]"); cout << "Input: " << Text << endl; cout << "Pattern: " << p.Pattern() << endl; cout << "" << endl; cout << "3 captured tokens are in brackets" << endl; cout << "" << endl; cout << "WhitespaceSensitive = " << tf(t.DefaultRuleSet().WhitespaceSensitive()) << endl; cout << t.Transform(Text) << endl; cout << "" << endl; t.DefaultRuleSet().WhitespaceSensitive(true); cout << "WhitespaceSensitive = " << tf(t.DefaultRuleSet().WhitespaceSensitive()) << endl; cout << t.Transform(Text) << endl; }
Imports System
Imports uCalcSoftware
Public Module Program
Public Sub Main()
Dim uc As New uCalc()
Dim t = uc.NewTransformer()
Dim Text = "This is a test."
Dim p = t.FromTo("This {words:3}", "[{words}]")
Console.WriteLine($"Input: {Text}")
Console.WriteLine($"Pattern: {p.Pattern}")
Console.WriteLine("")
Console.WriteLine("3 captured tokens are in brackets")
Console.WriteLine("")
Console.WriteLine($"WhitespaceSensitive = {t.DefaultRuleSet.WhitespaceSensitive}")
Console.WriteLine(t.Transform(Text))
Console.WriteLine("")
t.DefaultRuleSet.WhitespaceSensitive = true
Console.WriteLine($"WhitespaceSensitive = {t.DefaultRuleSet.WhitespaceSensitive}")
Console.WriteLine(t.Transform(Text))
End Sub
End Module
Input: This is a test.
Pattern: This {words:3}
3 captured tokens are in brackets
WhitespaceSensitive = False
[is a test].
WhitespaceSensitive = True
[ is ]a test. Imports System Imports uCalcSoftware Public Module Program Public Sub Main() Dim uc As New uCalc() Dim t = uc.NewTransformer() Dim Text = "This is a test." Dim p = t.FromTo("This {words:3}", "[{words}]") Console.WriteLine($"Input: {Text}") Console.WriteLine($"Pattern: {p.Pattern}") Console.WriteLine("") Console.WriteLine("3 captured tokens are in brackets") Console.WriteLine("") Console.WriteLine($"WhitespaceSensitive = {t.DefaultRuleSet.WhitespaceSensitive}") Console.WriteLine(t.Transform(Text)) Console.WriteLine("") t.DefaultRuleSet.WhitespaceSensitive = true Console.WriteLine($"WhitespaceSensitive = {t.DefaultRuleSet.WhitespaceSensitive}") Console.WriteLine(t.Transform(Text)) End Sub End Module
ID: 140
using uCalcSoftware;
var uc = new uCalc();
var t = uc.NewTransformer();
t.Text = "x = 1; if (true) func1(3+4); else func2(x*y); y = x + 2";
var p = t.Pattern("if {etc}");
Console.WriteLine($"Input: {t.Text}");
Console.WriteLine($"Pattern: {p.Pattern}");
Console.WriteLine("");
t.Find();
Console.WriteLine($"StatementSensitive: {t.DefaultRuleSet.StatementSensitive}");
Console.WriteLine(t.Matches.Text);
Console.WriteLine("");
t.DefaultRuleSet.StatementSensitive = false;
t.Find();
Console.WriteLine($"StatementSensitive: {t.DefaultRuleSet.StatementSensitive}");
Console.WriteLine(t.Matches.Text);
Input: x = 1; if (true) func1(3+4); else func2(x*y); y = x + 2
Pattern: if {etc}
StatementSensitive: True
if (true) func1(3+4)
StatementSensitive: False
if (true) func1(3+4); else func2(x*y); y = x + 2 using uCalcSoftware; var uc = new uCalc(); var t = uc.NewTransformer(); t.Text = "x = 1; if (true) func1(3+4); else func2(x*y); y = x + 2"; var p = t.Pattern("if {etc}"); Console.WriteLine($"Input: {t.Text}"); Console.WriteLine($"Pattern: {p.Pattern}"); Console.WriteLine(""); t.Find(); Console.WriteLine($"StatementSensitive: {t.DefaultRuleSet.StatementSensitive}"); Console.WriteLine(t.Matches.Text); Console.WriteLine(""); t.DefaultRuleSet.StatementSensitive = false; t.Find(); Console.WriteLine($"StatementSensitive: {t.DefaultRuleSet.StatementSensitive}"); Console.WriteLine(t.Matches.Text);
#include
#include "uCalc.h"
using namespace std;
using namespace uCalcSoftware;
#define tf(IsTrue) ((IsTrue) ? "True" : "False")
int main() {
uCalc uc;
auto t = uc.NewTransformer();
t.Text("x = 1; if (true) func1(3+4); else func2(x*y); y = x + 2");
auto p = t.Pattern("if {etc}");
cout << "Input: " << t.Text() << endl;
cout << "Pattern: " << p.Pattern() << endl;
cout << "" << endl;
t.Find();
cout << "StatementSensitive: " << tf(t.DefaultRuleSet().StatementSensitive()) << endl;
cout << t.Matches().Text() << endl;
cout << "" << endl;
t.DefaultRuleSet().StatementSensitive(false);
t.Find();
cout << "StatementSensitive: " << tf(t.DefaultRuleSet().StatementSensitive()) << endl;
cout << t.Matches().Text() << endl;
}
Input: x = 1; if (true) func1(3+4); else func2(x*y); y = x + 2
Pattern: if {etc}
StatementSensitive: True
if (true) func1(3+4)
StatementSensitive: False
if (true) func1(3+4); else func2(x*y); y = x + 2 #include <iostream> #include "uCalc.h" using namespace std; using namespace uCalcSoftware; #define tf(IsTrue) ((IsTrue) ? "True" : "False") int main() { uCalc uc; auto t = uc.NewTransformer(); t.Text("x = 1; if (true) func1(3+4); else func2(x*y); y = x + 2"); auto p = t.Pattern("if {etc}"); cout << "Input: " << t.Text() << endl; cout << "Pattern: " << p.Pattern() << endl; cout << "" << endl; t.Find(); cout << "StatementSensitive: " << tf(t.DefaultRuleSet().StatementSensitive()) << endl; cout << t.Matches().Text() << endl; cout << "" << endl; t.DefaultRuleSet().StatementSensitive(false); t.Find(); cout << "StatementSensitive: " << tf(t.DefaultRuleSet().StatementSensitive()) << endl; cout << t.Matches().Text() << endl; }
Imports System
Imports uCalcSoftware
Public Module Program
Public Sub Main()
Dim uc As New uCalc()
Dim t = uc.NewTransformer()
t.Text = "x = 1; if (true) func1(3+4); else func2(x*y); y = x + 2"
Dim p = t.Pattern("if {etc}")
Console.WriteLine($"Input: {t.Text}")
Console.WriteLine($"Pattern: {p.Pattern}")
Console.WriteLine("")
t.Find()
Console.WriteLine($"StatementSensitive: {t.DefaultRuleSet.StatementSensitive}")
Console.WriteLine(t.Matches.Text)
Console.WriteLine("")
t.DefaultRuleSet.StatementSensitive = false
t.Find()
Console.WriteLine($"StatementSensitive: {t.DefaultRuleSet.StatementSensitive}")
Console.WriteLine(t.Matches.Text)
End Sub
End Module
Input: x = 1; if (true) func1(3+4); else func2(x*y); y = x + 2
Pattern: if {etc}
StatementSensitive: True
if (true) func1(3+4)
StatementSensitive: False
if (true) func1(3+4); else func2(x*y); y = x + 2 Imports System Imports uCalcSoftware Public Module Program Public Sub Main() Dim uc As New uCalc() Dim t = uc.NewTransformer() t.Text = "x = 1; if (true) func1(3+4); else func2(x*y); y = x + 2" Dim p = t.Pattern("if {etc}") Console.WriteLine($"Input: {t.Text}") Console.WriteLine($"Pattern: {p.Pattern}") Console.WriteLine("") t.Find() Console.WriteLine($"StatementSensitive: {t.DefaultRuleSet.StatementSensitive}") Console.WriteLine(t.Matches.Text) Console.WriteLine("") t.DefaultRuleSet.StatementSensitive = false t.Find() Console.WriteLine($"StatementSensitive: {t.DefaultRuleSet.StatementSensitive}") Console.WriteLine(t.Matches.Text) End Sub End Module
ID: 152
using uCalcSoftware;
var uc = new uCalc();
var ExprT = uc.ExpressionTransformer; // Transformer used for Eval() and Evaluate()
ExprT.DefaultRuleSet.RewindOnChange = true;
ExprT.FromTo("AddUp({x})", "{x}");
ExprT.FromTo("AddUp({x}, {y})", "({x} + AddUp({y}))");
ExprT.FromTo("ArgCount({x})", "1");
ExprT.FromTo("ArgCount({x}, {y})", "(1 + ArgCount({y}))");
ExprT.FromTo("Average({x}, {y})", "AddUp({x}, {y}) / ArgCount({x}, {y})");
var Expression = "Average(1, 2, 3, 4)";
Console.WriteLine($"Input: {Expression}");
Console.WriteLine($"Transform: {ExprT.Transform(Expression)}");
Console.WriteLine($"Eval: {uc.Eval(Expression)}");
Input: Average(1, 2, 3, 4)
Transform: (1 + (2 + (3 + 4))) / (1 + (1 + (1 + 1)))
Eval: 2.5 using uCalcSoftware; var uc = new uCalc(); var ExprT = uc.ExpressionTransformer; // Transformer used for Eval() and Evaluate() ExprT.DefaultRuleSet.RewindOnChange = true; ExprT.FromTo("AddUp({x})", "{x}"); ExprT.FromTo("AddUp({x}, {y})", "({x} + AddUp({y}))"); ExprT.FromTo("ArgCount({x})", "1"); ExprT.FromTo("ArgCount({x}, {y})", "(1 + ArgCount({y}))"); ExprT.FromTo("Average({x}, {y})", "AddUp({x}, {y}) / ArgCount({x}, {y})"); var Expression = "Average(1, 2, 3, 4)"; Console.WriteLine($"Input: {Expression}"); Console.WriteLine($"Transform: {ExprT.Transform(Expression)}"); Console.WriteLine($"Eval: {uc.Eval(Expression)}");
#include
#include "uCalc.h"
using namespace std;
using namespace uCalcSoftware;
int main() {
uCalc uc;
auto ExprT = uc.ExpressionTransformer(); // Transformer used for Eval() and Evaluate()
ExprT.DefaultRuleSet().RewindOnChange(true);
ExprT.FromTo("AddUp({x})", "{x}");
ExprT.FromTo("AddUp({x}, {y})", "({x} + AddUp({y}))");
ExprT.FromTo("ArgCount({x})", "1");
ExprT.FromTo("ArgCount({x}, {y})", "(1 + ArgCount({y}))");
ExprT.FromTo("Average({x}, {y})", "AddUp({x}, {y}) / ArgCount({x}, {y})");
auto Expression = "Average(1, 2, 3, 4)";
cout << "Input: " << Expression << endl;
cout << "Transform: " << ExprT.Transform(Expression) << endl;
cout << "Eval: " << uc.Eval(Expression) << endl;
}
Input: Average(1, 2, 3, 4)
Transform: (1 + (2 + (3 + 4))) / (1 + (1 + (1 + 1)))
Eval: 2.5 #include <iostream> #include "uCalc.h" using namespace std; using namespace uCalcSoftware; int main() { uCalc uc; auto ExprT = uc.ExpressionTransformer(); // Transformer used for Eval() and Evaluate() ExprT.DefaultRuleSet().RewindOnChange(true); ExprT.FromTo("AddUp({x})", "{x}"); ExprT.FromTo("AddUp({x}, {y})", "({x} + AddUp({y}))"); ExprT.FromTo("ArgCount({x})", "1"); ExprT.FromTo("ArgCount({x}, {y})", "(1 + ArgCount({y}))"); ExprT.FromTo("Average({x}, {y})", "AddUp({x}, {y}) / ArgCount({x}, {y})"); auto Expression = "Average(1, 2, 3, 4)"; cout << "Input: " << Expression << endl; cout << "Transform: " << ExprT.Transform(Expression) << endl; cout << "Eval: " << uc.Eval(Expression) << endl; }
Imports System
Imports uCalcSoftware
Public Module Program
Public Sub Main()
Dim uc As New uCalc()
Dim ExprT = uc.ExpressionTransformer '// Transformer used for Eval() and Evaluate()
ExprT.DefaultRuleSet.RewindOnChange = true
ExprT.FromTo("AddUp({x})", "{x}")
ExprT.FromTo("AddUp({x}, {y})", "({x} + AddUp({y}))")
ExprT.FromTo("ArgCount({x})", "1")
ExprT.FromTo("ArgCount({x}, {y})", "(1 + ArgCount({y}))")
ExprT.FromTo("Average({x}, {y})", "AddUp({x}, {y}) / ArgCount({x}, {y})")
Dim Expression = "Average(1, 2, 3, 4)"
Console.WriteLine($"Input: {Expression}")
Console.WriteLine($"Transform: {ExprT.Transform(Expression)}")
Console.WriteLine($"Eval: {uc.Eval(Expression)}")
End Sub
End Module
Input: Average(1, 2, 3, 4)
Transform: (1 + (2 + (3 + 4))) / (1 + (1 + (1 + 1)))
Eval: 2.5 Imports System Imports uCalcSoftware Public Module Program Public Sub Main() Dim uc As New uCalc() Dim ExprT = uc.ExpressionTransformer '// Transformer used for Eval() and Evaluate() ExprT.DefaultRuleSet.RewindOnChange = true ExprT.FromTo("AddUp({x})", "{x}") ExprT.FromTo("AddUp({x}, {y})", "({x} + AddUp({y}))") ExprT.FromTo("ArgCount({x})", "1") ExprT.FromTo("ArgCount({x}, {y})", "(1 + ArgCount({y}))") ExprT.FromTo("Average({x}, {y})", "AddUp({x}, {y}) / ArgCount({x}, {y})") Dim Expression = "Average(1, 2, 3, 4)" Console.WriteLine($"Input: {Expression}") Console.WriteLine($"Transform: {ExprT.Transform(Expression)}") Console.WriteLine($"Eval: {uc.Eval(Expression)}") End Sub End Module